package sj;

import java.util.concurrent.locks.ReentrantLock;

//可重入锁 功能1：可以重复获取锁，但加锁和解锁需要手动进行，且次数需一样，否则其他线程无法获得锁。
public class Add10k2_ReentrantLock {
    int count = 0;
    ReentrantLock lock = new ReentrantLock();

    void add10k() {
        lock.lock();//获取锁
        try {
            int i = 0;
            while (i++ < 10000) {
                count++;
            }
        } finally {
            lock.unlock();//保证锁能释放
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Add10k2_ReentrantLock test = new Add10k2_ReentrantLock();

        // 创建两个线程，执行 add() 操作
        Thread th1 = new Thread(() -> {
            test.add10k();
        });
        Thread th2 = new Thread(() -> {
            test.add10k();
        });

        // 启动两个线程
        th1.start();
        th2.start();
        // 等待两个线程执行结束
        th1.join();
        th2.join();

        System.out.println(test.count);
    }
}
